package stu.aistar.day02;

public class OperatorDemo {
    public static void main(String[] args) {
        System.out.println(1+2+3+""+4+5);//645

        System.out.println(9.0/2);//4.5

        System.out.println(9/2);//取整  4

        System.out.println(10%3);//1

        int year = 2089;

        System.out.println(year/1000);//2

        System.out.println(year/100%10);

        System.out.println(year/10%10);
        //原则 - 任意数字%10 = 最末尾的数字
        System.out.println(year%10);//9

        int n = 2;
        n+=1;//n = n + 1
        System.out.println(n);//3

        //未来知道:开发中尽量不要使用,不是一个原子操作,导致多线程不安全.
        byte b = 127;
//        b = b + 1;//error
        b+=1;//ok // b = (byte)(b+1);

        // 底层会判断是否需要进行一个类型的窄化操作[类型的强制转换操作]
        System.out.println(b);//-128

        //前++ - ++符号在变量的左边
        int x = 1;
        //++x;//x = x+1;

        //后++ - ++在变量的右边
        x++;//合理的表达式 // x = x + 1;
        System.out.println(x);//2

//        byte bt = 127;
//        ++bt;
//        System.out.println(bt);

        System.out.println("=====华丽丽的分割线====");

        //现象
        //前++  变量和表达式都会自增1
        int x1 = 1;
        int result1 = ++x1;
        System.out.println("result1:"+result1);//2
        System.out.println("x1:"+x1); //2

        //后++ , 变量仍然自增1,但是x2++的结果是这个x2变量自增之前的值
        //       表达式的结果是变量自增之前的值
        int x2 = 1;
        int result2 = x2++;
        System.out.println("result2:"+result2);//1
        System.out.println("x2:"+x2);//2

        System.out.println("========练习=========");

        int o1 = 1;
        int o2 = 1;
        //o1=2     o1=3   o2=0
        //o3 = 1 + 3 + 0 = 4
        int o3 = o1++ + ++o1 + --o2;
        //4 + 0
        int o4 = o3-- + o2++;
        System.out.println("o4:"+o4);

        System.out.println(10>3);

        //条件表达式
        //逻辑与 - 短路与
        System.out.println(10>3 && 5<3);//true


        //短路的特性:当左边的条件表达式已经能够决定整个结果了,那么后面的条件表达式将不会执行.
        System.out.println(2>3 && 5<3);//false

        //证明短路的特性
        int s1 = 1;
        System.out.println(5>3 && (++s1)>10);

        System.out.println(s1);

        System.out.println(3>2 || 2<3);//true

        System.out.println(!(2>3));//true

        System.out.println(10>3 & 3>2);//true

        System.out.println(10 & 8);
    }
}
